package com.softer.wxzj.service;

import com.github.pagehelper.PageInfo;
import com.softer.wxzj.common.entity.CommonResult;
import com.softer.wxzj.common.entity.Page;
import com.softer.wxzj.entity.*;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * @author Gong Zhiyang
 * @date 2019/7/17
 */
public interface ExpProjectReqService {
    /**
     * 获取项目管理列表
     *
     * @param page           分页实体
     * @param baseRegionInfo 查询实体
     * @return 列表
     */
    PageInfo<BaseRegionInfo> getRegionList(Page page, BaseRegionInfo baseRegionInfo);

    /**
     * 预览
     *
     * @param page          分页实体
     * @param expProjectReq 查询实体
     * @return 列表
     */
    PageInfo<ExpProjectReq> preview(Page page, ExpProjectReq expProjectReq);

    PageInfo<ExpProjectReq> getExpirationDate(Page page, String regionId, String maintainType);

    /**
     * 新增保存
     *
     * @param reqList 维修项目
     * @return 结果
     */
    CommonResult addSave(ReqList reqList);

    /**
     * 修改
     *
     * @param reqList 维修项目
     * @return 结果
     */
    CommonResult update(ReqList reqList);

    /**
     * 程序详情
     *
     * @param id ID
     * @return 维修项目
     */
    ExpProjectReq getInfo(String id);

    /**
     * 刪除
     *
     * @param id ID
     * @return 結果
     */
    CommonResult delete(String id);

    /**
     * 竣工验收列表
     *
     * @param page          分页实体
     * @param expProjectReq 查询实体
     * @return 列表
     */
    PageInfo<ExpProjectReq> finish(Page page, ExpProjectReq expProjectReq);

    /**
     * 验收详情查询
     *
     * @param id 项目id
     * @param arcType 图档大类
     * @return
     */
    ExpProjectReq getFinishInfo(String id, String arcType);

    /**
     * 验收决算金额最大可输入上限
     *
     * @param id 项目id
     * @return
     */
    BigDecimal inputFinishNumMax(String id);

    /**
     * 验收保存
     *
     * @param expProjectReq 验收项目实体
     * @return 操作结果
     */
    CommonResult updateFinish(ExpProjectReq expProjectReq);

    /**
     * 验收撤销
     *
     * @param id      项目id
     * @param arcType 图档大类
     * @param operNo  外网操作账号
     * @return 撤销结果
     */
    CommonResult finishCancel(String id, String arcType, String operNo);

    /**
     * 是否允许申报
     *
     * @param
     * @return 修改结果
     */
    TabAndDeclareEntity whetherAllowDeclaration(ExpProjectReq expProjectReq);

    /**
     * 申报
     *
     * @param id 项目ID
     * @return 修改结果
     */
    CommonResult updateState(String id,String proReportUser);

    /**
     * 查询当前小区选中的维修类别下的维修对象信息
     *
     * @param maintenanceEquipment regionId            小区id&
     *                             maintenanceObjectId 对象类别ID
     *                             subRegionId 分区ID
     *                             buildId 自然幢ID
     *                             splitRange 分摊范围
     * @return 维修对象信息
     */
    List<MaintenanceEquipment> selectMaintenanceEquipment(MaintenanceEquipment maintenanceEquipment);

    /**
     * 分摊划分
     *
     * @param id 项目ID
     * @return 小区下所有的自然幢
     */
    Map<String, List<BaseBuildInfo>> getApportionInfo(String id);

    /**
     * 新增分摊明细
     *
     * @param idList 分摊ID集合
     *               reqId 项目ID
     * @return 分摊详情
     */
    Map<String, Object> apportionDetail(List<String> idList, String reqId);

    /**
     * 分摊划分-保存
     *
     * @param
     * @return 保存结果
     */
    CommonResult apportionInfoSave(ExpProjectReq expProjectReq, List<OwnerSignature> ol);

    /**
     * 预分摊清册
     *
     * @param reqId 项目ID
     * @return 分摊详情
     */
    PageInfo<OwnerSignature> apportionForm(String reqId, Page page);

    ExpProjectReq getInfoById(String id);

    /**
     * 批量申报
     *
     * @param list 项目Id集合
     * @return 修改结果
     */
    CommonResult batchCommit(List<String> list);

    /**
     * 查询自然幢汇总信息，用于分摊划分时的自然幢浮窗显示
     *
     * @param id 自然幢Id
     * @return 汇总信息
     */
    BuildSummaryInfo getBuildSummaryInfo(String id);

    /**
     * 获取使用申请表数据信息
     *
     * @param id 项目ID
     * @return 申请表数据
     */
    Application getApplication(String id);

    /**
     * 查询房屋的项目
     *
     * @param expProjectReq
     * @return
     */
    PageInfo<ExpProjectReq> selectByHouseId(Page page, ExpProjectReq expProjectReq);
    /**
     * 查詢详情
     * 用于跳转连接的查询
     *
     * @param id ID
     * @return 维修项目
     */
    ExpProjectReq getDetails(String id);

    PageInfo<ExpProjectReq> selectByMainObject(Page page,ExpProjectReq expProjectReq);
    /**
     * 通过维修企业、审计企业、监理企业查询维修项目的接口
     *
     * @param page          分页实体
     * @param expProjectReq 查询实体
     * @return 维修项目列表
     */
    PageInfo<ExpProjectReq> getProjectReqListByCorpId(Page page, ExpProjectReq expProjectReq);
    /**
     * 查询自然幢维修记录列表
     *
     * @param page    分页实体
     * @param buildId 自然幢ID
     * @return 列表
     */
    PageInfo<ExpProjectReq> getBuildProjectList(Page page, String buildId);
    /**
     * 外网批量申报
     *
     * @param reqList list 项目Id集合
     *                operNo 登录账号
     * @return 修改结果
     */
    CommonResult batchCommitFromExtraNet(ReqList reqList);

    /**
     * 项目审核查询列表
     *
     * @param page
     * @param expProjectReq
     * @return
     */
    PageInfo<ExpProjectReq> projectCheckList(Page page, ExpProjectReq expProjectReq,String operNo);

    PageInfo<ExpProjectReq> appropriationCheckList(Page page, ExpProjectReq expProjectReq);
    /**
     * 分摊划分重置
     *
     * @param reqId 项目ID
     * @return 分摊划分重置结果
     */
    CommonResult reset(String reqId);
    /**
     * 业委会/居委会项目审核查询列表
     *
     * @param page          分页实体
     * @param expProjectReq 查询实体
     * @return 项目审核查询列表
     */
    PageInfo<ExpProjectReq> projectCheckListForCommittee(Page page, ExpProjectReq expProjectReq);
    /**
     * 业委会/居委会拨款审核查询列表
     *
     * @param page          分页实体
     * @param expProjectReq 查询实体
     * @return 拨款审核查询列表
     */
    PageInfo<ExpProjectReq> appropriationCheckListForCommittee(Page page, ExpProjectReq expProjectReq);
    /**
     * 业委会/居委会维修项目管理列表
     *
     * @param page          分页实体
     * @param expProjectReq 查询实体
     * @return 列表
     */
    PageInfo<ExpProjectReq> previewForCommittee(Page page, ExpProjectReq expProjectReq);
}
